﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using Gra.Seguros.Servicio.Be;

namespace Gra.Seguros.Servicio.Dalc
{
   public  class EventoDalc: IDisposable
    {
        #region "Procedimientos Consultas"

            public List<EventoBe> listar(int _cClaseEvento)
            {
                try
                {
                    List<EventoBe> lst = new List<EventoBe>();
                    using (SqlCommand oCommand = new SqlCommand("uspListarEvento", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        oCommand.Parameters.Add("@cClaseEvento", SqlDbType.Int).Value = _cClaseEvento;
                        using (SqlDataReader drListado = oCommand.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection))
                        {
                            if (drListado.HasRows)
                            {
                                while ((drListado.Read()))
                                {
                                    
                                    EventoBe obj = new EventoBe();
                                    obj.cEvento= drListado.GetInt32(drListado.GetOrdinal("cEvento"));
                                    obj.dEvento= drListado.GetString(drListado.GetOrdinal("dEvento"));
                                    obj.dValorDefecto= drListado.GetString(drListado.GetOrdinal("dValorDefecto"));
                                    obj.nValMin = drListado.GetDecimal(drListado.GetOrdinal("nValMin"));
                                    obj.nValMax=drListado.GetDecimal(drListado.GetOrdinal("nValMax"));
                                    obj.nIntervalo=drListado.GetDecimal(drListado.GetOrdinal("nIntervalo"));
                                    obj.oTipoEvento = new TipoEventoBe();
                                    obj.oTipoEvento.cTipoEvento = drListado.GetInt32(drListado.GetOrdinal("cTipoEvento"));
                                    obj.oTipoEvento.dTipoEvento = drListado.GetString(drListado.GetOrdinal("dTipoEvento"));
                                    obj.oTipoEvento.sBinaria = drListado.GetBoolean(drListado.GetOrdinal("sBinaria"));
                                    obj.oClaseEvento=new ClaseEventoBe();
                                    obj.oClaseEvento.cClaseEvento=drListado.GetInt32(drListado.GetOrdinal("cClaseEvento"));
                                    obj.oClaseEvento.dClaseEvento=drListado.GetString(drListado.GetOrdinal("dClaseEvento"));
                                    lst.Add(obj);
                                }
                            }
                        }
                    }

                    return lst;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            public List<EventoBe> listarxEvento(int _cEvento)
            {
                try
                {
                    List<EventoBe> lst = new List<EventoBe>();
                    using (SqlCommand oCommand = new SqlCommand("uspListarEventoxEvento", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        oCommand.Parameters.Add("@cEvento", SqlDbType.Int).Value = _cEvento;
                        using (SqlDataReader drListado = oCommand.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection))
                        {
                            if (drListado.HasRows)
                            {
                                while ((drListado.Read()))
                                {
                                    EventoBe obj = new EventoBe();
                                    obj.cEvento = drListado.GetInt32(drListado.GetOrdinal("cEvento"));
                                    obj.dEvento = drListado.GetString(drListado.GetOrdinal("dEvento"));
                                    obj.dValorDefecto = drListado.GetString(drListado.GetOrdinal("dValorDefecto"));
                                    obj.nValMin = drListado.GetDecimal(drListado.GetOrdinal("nValMin"));
                                    obj.nValMax = drListado.GetDecimal(drListado.GetOrdinal("nValMax"));
                                    obj.nIntervalo = drListado.GetDecimal(drListado.GetOrdinal("nIntervalo"));
                                    obj.oTipoEvento = new TipoEventoBe();
                                    obj.oTipoEvento.dTipoEvento = drListado.GetString(drListado.GetOrdinal("dTipoEvento"));                                    
                                    obj.oTipoEvento.sBinaria = drListado.GetBoolean(drListado.GetOrdinal("sBinaria"));                                    
                                    lst.Add(obj);
                                }
                            }
                        }
                    }

                    return lst;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            } 

        #endregion

        #region "Constructor & Disposable"
            private bool _disposed = false;
            SqlConnection oCn = null;
            public EventoDalc()
            {
                string strConnection = ConfigurationManager.ConnectionStrings["dbSeguros"].ConnectionString;
                oCn = new SqlConnection(strConnection);
                oCn.Open();
            }

            public void Dispose()
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }
            protected virtual void Dispose(bool disposing)
            {
                if (!_disposed)
                {
                    if (disposing)
                    {
                        //Dispose managed resources here. llamar componetes de conexion u otros.                        
                        if (oCn.State != ConnectionState.Closed)
                        {
                            oCn.Close();
                        }
                        oCn.Dispose();
                    }
                    //Disposed unmanaged resources here.
                    //set the _disposed flag to prevent subsequent disposals.
                    _disposed = true;
                }
            }
            //Finalization code.
            ~EventoDalc()
            {
                Dispose(false);
            }
        #endregion
    }
}
